#ifndef BASE_H
#define BASE_H

#include <QtGui>

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>

#include <iostream>
#include <string.h>
#include <string>

#include "proto.h"

using namespace std;

class FenetreClient;

class Base
{
protected:
    int sock;
    sockaddr_in serveur;
    hostent *info;
    const char *port; // Le port sur lequel est connectée la socket.
    const char *ip; // L'ip à laquelle est connectée la socket.
    const char *login;
    bool connecte; //  vrai si la socket est connectée, faux sinon.
    int activite; // numéro de l'activité en cours, 0 si pas d'activité en cours.
    pthread_t threadLecture; // Le thread en écoute sur la socket.

public:
    Base(){}
    int ecrireMessage(int idMessage);
    int ecrireMessage(int idMessage, int param1);
    int ecrireMessage(int idMessage, const char *param1);
    int ecrireMessage(int idMessage, const string& param1);
    int ecrireMessage(int idMessage, ListeChaines *param1); // deprecated
    int ecrireMessage(int idMessage, const list<string>& param1);
    int ecrireMessage(int idMessage, const char* param1, ListeChaines *param2); // deprecated
    int ecrireMessage(int idMessage, const string& param1, ListeChaines *param2); // deprecated
    int ecrireMessage(int idMessage, const string& param1, const string& param2);
    int ecrireMessage(int idMessage, const char* param1, const list<string>& param2); // deprecated
    int ecrireMessage(int idMessage, const string& param1, const list<string>& param2);
    int ecrireMessage(int idMessage, const string& param1, const string& param2, const string& param3);
    int ecrireMessage(int idMessage, const string& param1, const string& param2, const list<string>& param3);

protected:
    int lireEntierUnOctet();
    int lireEntier();
    string lireChaine();
    list<string> lireListeChaines();
    int ecrireEntierUnOctet(int entier);
    int ecrireEntier(int entier);
    int ecrireChaine(const char* chaine);
    int ecrireChaine(const string& chaine);
    int ecrireListeChaines(ListeChaines* listeChaines); // deprecated
    int ecrireListeChaines(const list<string>& listeChaines);
};


#endif // BASE_H
